/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dao.impl;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import pe.com.cotelasa.common.dao.DaoImpl;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOVentaNotaCredito;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.entidad.VentaNotaCredito;

/**
 *
 * @author Jorge
 */
@SuppressWarnings({"unchecked", "serial", "rawtypes", "deprecation"})
@Repository("daoVentaNotaCredito")
public class DAOVentaNotaCredito extends DaoImpl<VentaNotaCredito, Integer> implements IDAOVentaNotaCredito, Serializable {

    @Override
    public int obtenerIdMonedaNotaCredito(Integer idVentaNotaCredito) throws DAOException {
        try {
            Integer moneda = (Integer) sessionFactory.getCurrentSession().createSQLQuery("SELECT moneda FROM cotelasa.venta_nota_credito WHERE codnc=:id").addScalar("moneda", Hibernate.INTEGER).setParameter("id", idVentaNotaCredito).uniqueResult();
            return moneda.intValue();
        } catch (Exception e) {
        }
        return 0;
    }

    @Override
    public int obtenerIdMotivoNotaCredito(Integer idVentaNotaCredito) throws DAOException {
        try {
            Integer moneda = (Integer) sessionFactory.getCurrentSession().createSQLQuery("SELECT mot_emision FROM cotelasa.venta_nota_credito WHERE codnc=:id").addScalar("mot_emision", Hibernate.INTEGER).setParameter("id", idVentaNotaCredito).uniqueResult();
            return moneda.intValue();
        } catch (Exception e) {
        }
        return 0;
    }

    @Override
    public List<VentaNotaCredito> obtenerNotaCreditoRV(String inicio, String fin, Integer idSede) throws DAOException {
        List<VentaNotaCredito> listaFacturacion = new ArrayList<VentaNotaCredito>();
        try {
            listaFacturacion = sessionFactory.getCurrentSession().createSQLQuery("SELECT * FROM cotelasa.venta_nota_credito "
                    + "WHERE fechanc>='" + inicio + "' AND fechanc<='" + fin + "' AND id_sede="+idSede+" ORDER BY fechanc ASC")
                    .addEntity(VentaNotaCredito.class)
                    .list();

        } catch (Exception e) {
        }
        return listaFacturacion;
    }

    @Override
    public List<VentaNotaCredito> obtenerVentaNotaCreditoBusqueda(VentaNotaCredito ventaNotaCredito, Date fechaInicio, Date fechaFinal) throws DAOException {
        List<VentaNotaCredito> lista = new ArrayList<VentaNotaCredito>();
        try {
            sessionFactory.getCurrentSession().flush();
            Criteria query = sessionFactory.getCurrentSession().createCriteria(VentaNotaCredito.class)
                    .addOrder(Order.desc("id"))
                    .add(Restrictions.eq("estadoRegistro", ESTADO_REGISTRO.ACTIVO.getValor()))
                    .add(Restrictions.like("ruc", "%" + ventaNotaCredito.getRuc() + "%"))
                    .add(Restrictions.eq("sede", ventaNotaCredito.getSede()))
                    .add(Restrictions.like("numnc", "%" + ventaNotaCredito.getNumnc() + "%"));


            if (fechaInicio == null && fechaFinal == null) {
                lista = query.list();
            } else if (fechaInicio != null && fechaFinal != null) {
                lista = query.add(Restrictions.ge("fecha", fechaInicio)).add(Restrictions.le("fecha", fechaFinal)).list();
            } else if (fechaInicio == null) {
                lista = query.add(Restrictions.le("fecha", fechaFinal)).list();
            } else if (fechaFinal == null) {
                lista = query.add(Restrictions.ge("fecha", fechaInicio)).list();
            }

        } catch (Exception e) {
            throw new DAOException(e.getMessage(), e);
        }
        return lista;
    }

    @Override
    public void eliminarDetalleNC(Integer idVentaNotaCredito) throws DAOException {
        try {
            sessionFactory.getCurrentSession().createSQLQuery("DELETE FROM cotelasa.venta_detalle_nota_credito WHERE codnc=:id").setParameter("id", idVentaNotaCredito).executeUpdate();
        } catch (Exception e) {
        }
    }
}
